/**
 * Project : Looker
 * Author  : solosky
 * File    : ConfigSynchronizer.java
 * Date    : 2009-4-9
 * Package : net.looker.config
 * Lisence : Apache License 2.0 
 */
package net.looker.config;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;

import net.looker.data.Category;
import net.looker.util.MD5;
import net.looker.util.MysqlQuery;
import net.looker.util.URLUtils;

/**
 * 配置同步器
 * 同步文本配置和数据库配置
 * 文本配置主要是设置Looker的网站分析参数，数据库配置主要是新闻的分类，便于新闻的显示
 * 所有的配置以文本配置为主，每一次启动looker都会读取文本配置并和数据库中的配置同步
 * @author solosky
 */
public class ConfigSynchronizer
{

	/**
	 * 当前数据库中的站点hash
	 * 判断数据库是否存在，如果不存在，插入新纪录，存在更新记录
	 */
	private ArrayList <String> siteList;
	
	/**
	 * 当前数据库中的栏目hash
	 */
	private ArrayList <String> categoryList;
	
	
	/**
	 * 构造函数
	 */
	public ConfigSynchronizer()
	{
		siteList     = new  ArrayList <String>();
		categoryList = new ArrayList <String>();
		queryConfig();
	}
	
	
	/**
	 * 同步数据
	 */
	public  void synchronize(SiteConfig siteConfig)
	{
		updateSiteConfig(siteConfig);
		updateCategoryConfig(siteConfig);
	}
	
	/**
	 * 查询数据库中的配置
	 */
	public void queryConfig()
	{
		try {
			//查询站点配置
			String sql = "SELECT sitehash FROM #site";
			ResultSet rs = MysqlQuery.getInstance().query(sql);
			while (rs.next())
				siteList.add(rs.getString("sitehash"));
			
			//查询栏目配置
			sql  = "SELECT categoryhash FROM #category";
			rs = MysqlQuery.getInstance().query(sql);
			while (rs.next())
				categoryList.add(rs.getString("categoryhash"));
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 检查站点配置
	 */
	private void updateSiteConfig(SiteConfig siteConfig)
	{
		if ( siteList.contains( siteConfig.getSiteHash()))
		{
			//存在更新配置
		}
		else
		{
			//不存在，新增站点配置
			String sql = "INSERT INTO #site (sitehash,title,url) VALUES ("+
			siteConfig.getSiteHash()+",'"+
			siteConfig.get("site.title")+"','"+
			siteConfig.get("site.url")+"');";
			try {
				MysqlQuery.getInstance().execute(sql);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		}	
	}
	
	
	/**
	 * 检查栏目配置
	 */
	private void updateCategoryConfig(SiteConfig siteConfig)
	{
		Iterator<Category> it = siteConfig.getCategoryList().iterator(); 
		Category cate         = null;  
		String siteHash       = siteConfig.getSiteHash();
		while (it.hasNext())
		{
			cate = it.next();
			if ( categoryList.contains( cate.getCategoryHash()))
			{
				//存在更新配置
			}
			else
			{
				//不存在，新增站点配置
				String sql = "INSERT INTO #category (categoryhash,sitehash,title,url) VALUES ("+
				cate.getCategoryHash()+","+
				siteHash+",'"+
				cate.getTitle()+"','"+
				cate.getIndex()+"');";
				try {
					MysqlQuery.getInstance().execute(sql);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}	
			}	
			
		}
	}
}
